#pragma once

#ifdef MEMREPLAY_WRAP_D3D9

class CMemReplayDirect3DDevice9 : public IDirect3DDevice9
{
public:
	explicit CMemReplayDirect3DDevice9(IDirect3DDevice9* pWrap);

	/*** IUnknown methods ***/
	STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj);
	STDMETHOD_(ULONG,AddRef)(THIS);
	STDMETHOD_(ULONG,Release)(THIS);

	/*** IDirect3DDevice9 methods ***/
	STDMETHOD(TestCooperativeLevel)(THIS);
	STDMETHOD_(UINT, GetAvailableTextureMem)(THIS);
	STDMETHOD(EvictManagedResources)(THIS);
	STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9);
	STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps);
	STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain,D3DDISPLAYMODE* pMode);
	STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters);
	STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,IDirect3DSurface9* pCursorBitmap);
	STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags);
	STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow);

	STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain9** pSwapChain);
	STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain,IDirect3DSwapChain9** pSwapChain);

	STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters);
	STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain,D3DRASTER_STATUS* pRasterStatus);
	STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain,DWORD Flags,CONST D3DGAMMARAMP* pRamp);
	STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain,D3DGAMMARAMP* pRamp);
	STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture9** ppTexture,HANDLE* pSharedHandle);
	STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture9** ppVolumeTexture,HANDLE* pSharedHandle);
	STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture9** ppCubeTexture,HANDLE* pSharedHandle);
	STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer9** ppVertexBuffer,HANDLE* pSharedHandle);
	STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer9** ppIndexBuffer,HANDLE* pSharedHandle);
	STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget,IDirect3DSurface9* pDestSurface);
	STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain,IDirect3DSurface9* pDestSurface);
	STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestSurface,CONST RECT* pDestRect,D3DTEXTUREFILTERTYPE Filter);
	STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface,CONST RECT* pRect,D3DCOLOR color);
	STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle);
	STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9* pRenderTarget);
	STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9** ppRenderTarget);
	STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil);
	STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface);
	STDMETHOD(BeginScene)(THIS);
	STDMETHOD(EndScene)(THIS);
	STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil);
	STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix);
	STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport);
	STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport);
	STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane);
	STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane);
	STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value);
	STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD* pValue);
	STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,IDirect3DStateBlock9** ppSB);
	STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9** ppTexture);
	STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9* pTexture);
	STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value);
	STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD* pValue);
	STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD Value);
	STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect);
	STDMETHOD(GetScissorRect)(THIS_ RECT* pRect);
	STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount);
	STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount);
	STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride);
	STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride);
	STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements,IDirect3DVertexDeclaration9** ppDecl);
	STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl);
	STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl);
	STDMETHOD(SetFVF)(THIS_ DWORD FVF);
	STDMETHOD(GetFVF)(THIS_ DWORD* pFVF);
	STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader);
	STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader);
	STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader);
	STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount);
	STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount);
	STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount);
	STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount);
	STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT  BoolCount);
	STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount);
	STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride);
	STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9** ppStreamData,UINT* OffsetInBytes,UINT* pStride);
	STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT Divider);
	STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT* Divider);
	STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData);
	STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData);
	STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,IDirect3DPixelShader9** ppShader);
	STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader);
	STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader);
	STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount);
	STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount);
	STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount);
	STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount);
	STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT  BoolCount);
	STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount);
	STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery);

	STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle);
	STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle);
	STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs);
	STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS);
	STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestinationSurface,CONST POINT* pDestPoint);
	STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture,IDirect3DBaseTexture9* pDestinationTexture);
	STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix);
	STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*);
	STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial);
	STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial);
	STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT9*);
	STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT9*);
	STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable);
	STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable);
	STDMETHOD(BeginStateBlock)(THIS);
	STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB);
	STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus);
	STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus);
	STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue);
	STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses);
	STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries);
	STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries);
	STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber);
	STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber);
	STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware);
	STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS);
	STDMETHOD(SetNPatchMode)(THIS_ float nSegments);
	STDMETHOD_(float, GetNPatchMode)(THIS);
	STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer9* pDestBuffer,IDirect3DVertexDeclaration9* pVertexDecl,DWORD Flags);
	STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo);
	STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo);
	STDMETHOD(DeletePatch)(THIS_ UINT Handle);
	STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion);
	STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer);

private:
	IDirect3DDevice9* m_pWrap;
};

#endif

#ifdef MEMREPLAY_WRAP_D3D11

interface CMemReplayDirect3DDevice11 : ID3D11Device
{
public:
	explicit CMemReplayDirect3DDevice11(ID3D11Device* pWrap);

	/*** IUnknown methods ***/
	STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj);
	STDMETHOD_(ULONG,AddRef)(THIS);
	STDMETHOD_(ULONG,Release)(THIS);

	virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason( void) ;

	virtual HRESULT STDMETHODCALLTYPE SetExceptionMode( 
		UINT RaiseFlags) ;

	virtual UINT STDMETHODCALLTYPE GetExceptionMode( void) ;

	virtual HRESULT STDMETHODCALLTYPE GetPrivateData( 
		/* [in] */ REFGUID guid,
		/* [out][in] */ UINT *pDataSize,
		/* [size_is][out] */ void *pData) ;

	virtual HRESULT STDMETHODCALLTYPE SetPrivateData( 
		/* [in] */ REFGUID guid,
		/* [in] */ UINT DataSize,
		/* [size_is][in] */ const void *pData) ;

	virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( 
		/* [in] */ REFGUID guid,
		/* [in] */ const IUnknown *pData) ;

	virtual HRESULT STDMETHODCALLTYPE CreateBuffer( 
		/* [in] */ const D3D11_BUFFER_DESC *pDesc,
		/* [in] */ const D3D11_SUBRESOURCE_DATA *pInitialData,
		/* [out] */ ID3D11Buffer **ppBuffer) ;

	virtual HRESULT STDMETHODCALLTYPE CreateTexture1D( 
		/* [in] */ const D3D11_TEXTURE1D_DESC *pDesc,
		/* [in] */ const D3D11_SUBRESOURCE_DATA *pInitialData,
		/* [out] */ ID3D11Texture1D **ppTexture1D) ;

	virtual HRESULT STDMETHODCALLTYPE CreateTexture2D( 
		/* [in] */ const D3D11_TEXTURE2D_DESC *pDesc,
		/* [in] */ const D3D11_SUBRESOURCE_DATA *pInitialData,
		/* [out] */ ID3D11Texture2D **ppTexture2D) ;

	virtual HRESULT STDMETHODCALLTYPE CreateTexture3D( 
		/* [in] */ const D3D11_TEXTURE3D_DESC *pDesc,
		/* [in] */ const D3D11_SUBRESOURCE_DATA *pInitialData,
		/* [out] */ ID3D11Texture3D **ppTexture3D) ;

	virtual HRESULT STDMETHODCALLTYPE CreateShaderResourceView( 
		/* [in] */ ID3D11Resource *pResource,
		/* [in] */ const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc,
		/* [out] */ ID3D11ShaderResourceView **ppSRView) ;

	virtual HRESULT STDMETHODCALLTYPE CreateRenderTargetView( 
		/* [in] */ ID3D11Resource *pResource,
		/* [in] */ const D3D11_RENDER_TARGET_VIEW_DESC *pDesc,
		/* [out] */ ID3D11RenderTargetView **ppRTView) ;

	virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilView( 
		/* [in] */ ID3D11Resource *pResource,
		/* [in] */ const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc,
		/* [out] */ ID3D11DepthStencilView **ppDepthStencilView) ;

	virtual HRESULT STDMETHODCALLTYPE CreateInputLayout( 
		/* [size_is][in] */ const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs,
		/* [in] */ UINT NumElements,
		/* [in] */ const void *pShaderBytecodeWithInputSignature,
		/* [in] */ SIZE_T BytecodeLength,
		/* [out] */ ID3D11InputLayout **ppInputLayout) ;

	virtual HRESULT STDMETHODCALLTYPE CreateVertexShader( 
		/* [in] */ const void *pShaderBytecode,
		/* [in] */ SIZE_T BytecodeLength,
		/* [in] */ ID3D11ClassLinkage *pClassLinkage,
		/* [out] */ ID3D11VertexShader **ppVertexShader) ;

	virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader( 
		/* [in] */ const void *pShaderBytecode,
		/* [in] */ SIZE_T BytecodeLength,
		/* [in] */ ID3D11ClassLinkage *pClassLinkage,
		/* [out] */ ID3D11GeometryShader **ppGeometryShader) ;

	virtual HRESULT STDMETHODCALLTYPE CreateGeometryShaderWithStreamOutput( 
		/* [in] */ const void *pShaderBytecode,
		/* [in] */ SIZE_T BytecodeLength,
		/* [size_is][in] */ const D3D11_SO_DECLARATION_ENTRY *pSODeclaration,
		/* [in] */ UINT NumEntries,
		/* [in] */ const UINT *pBufferStrides,
		/* [in] */ UINT NumStrides,
		/* [in] */ UINT RasterizedStream,
		/* [in] */ ID3D11ClassLinkage *pClassLinkage,
		/* [out] */ ID3D11GeometryShader **ppGeometryShader) ;

	virtual HRESULT STDMETHODCALLTYPE CreatePixelShader( 
		/* [in] */ const void *pShaderBytecode,
		/* [in] */ SIZE_T BytecodeLength,
		/* [in] */ ID3D11ClassLinkage *pClassLinkage,
		/* [out] */ ID3D11PixelShader **ppPixelShader) ;

	virtual HRESULT STDMETHODCALLTYPE CreateBlendState( 
		/* [in] */ const D3D11_BLEND_DESC *pBlendStateDesc,
		/* [out] */ ID3D11BlendState **ppBlendState) ;

	virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilState( 
		/* [in] */ const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc,
		/* [out] */ ID3D11DepthStencilState **ppDepthStencilState) ;

	virtual HRESULT STDMETHODCALLTYPE CreateRasterizerState( 
		/* [in] */ const D3D11_RASTERIZER_DESC *pRasterizerDesc,
		/* [out] */ ID3D11RasterizerState **ppRasterizerState) ;

	virtual HRESULT STDMETHODCALLTYPE CreateSamplerState( 
		/* [in] */ const D3D11_SAMPLER_DESC *pSamplerDesc,
		/* [out] */ ID3D11SamplerState **ppSamplerState) ;

	virtual HRESULT STDMETHODCALLTYPE CreateQuery( 
		/* [in] */ const D3D11_QUERY_DESC *pQueryDesc,
		/* [out] */ ID3D11Query **ppQuery) ;

	virtual HRESULT STDMETHODCALLTYPE CreatePredicate( 
		/* [in] */ const D3D11_QUERY_DESC *pPredicateDesc,
		/* [out] */ ID3D11Predicate **ppPredicate) ;

	virtual HRESULT STDMETHODCALLTYPE CreateCounter( 
		/* [in] */ const D3D11_COUNTER_DESC *pCounterDesc,
		/* [out] */ ID3D11Counter **ppCounter) ;

	virtual HRESULT STDMETHODCALLTYPE CreateUnorderedAccessView(
		/* [in] */ ID3D11Resource *pResource,
		/* [in] */ const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc,
		/* [out] */ ID3D11UnorderedAccessView **ppUAView
		);
	virtual HRESULT STDMETHODCALLTYPE CreateHullShader(
		/* [in] */ const void *pShaderBytecode,
		/* [in] */ SIZE_T BytecodeLength,
		/* [in] */ ID3D11ClassLinkage *pClassLinkage,
		/* [out] */ ID3D11HullShader **ppHullShader
		);
	virtual HRESULT STDMETHODCALLTYPE CreateDomainShader(
		/* [in] */ const void *pShaderBytecode,
		/* [in] */ SIZE_T BytecodeLength,
		/* [in] */ ID3D11ClassLinkage *pClassLinkage,
		/* [out] */ ID3D11DomainShader **ppDomainShader
		);
	virtual HRESULT STDMETHODCALLTYPE CreateComputeShader(
		/* [in] */ const void *pShaderBytecode,
		/* [in] */ SIZE_T BytecodeLength,
		/* [in] */ ID3D11ClassLinkage *pClassLinkage,
		/* [out] */ ID3D11ComputeShader **ppComputeShader
		);
	virtual HRESULT STDMETHODCALLTYPE CreateClassLinkage(
		/* [out] */ ID3D11ClassLinkage **ppLinkage
		);
	virtual HRESULT STDMETHODCALLTYPE CreateDeferredContext(
		/* [in] */ UINT ContextFlags,
		/* [out] */ ID3D11DeviceContext **ppDeferredContext
		);
	virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport(
		/* [in] */ D3D11_FEATURE Feature,
		/* [in] */ void *pFeatureSupportData,
		/* [in] */ UINT FeatureSupportDataSize
		);
	virtual D3D_FEATURE_LEVEL STDMETHODCALLTYPE GetFeatureLevel();
	virtual void STDMETHODCALLTYPE GetImmediateContext(
		/* [out] */ ID3D11DeviceContext **ppImmediateContext
		);

	virtual HRESULT STDMETHODCALLTYPE CheckFormatSupport( 
		/* [in] */ DXGI_FORMAT Format,
		/* [retval][out] */ UINT *pFormatSupport) ;

	virtual HRESULT STDMETHODCALLTYPE CheckMultisampleQualityLevels( 
		DXGI_FORMAT Format,
		/* [in] */ UINT SampleCount,
		/* [retval][out] */ UINT *pNumQualityLevels) ;

	virtual void STDMETHODCALLTYPE CheckCounterInfo( 
		/* [retval][out] */ D3D11_COUNTER_INFO *pCounterInfo) ;

	virtual HRESULT STDMETHODCALLTYPE OpenSharedResource(
		HANDLE hResource,
		REFIID ReturnedInterface,
		void ** ppResource
		);

	virtual HRESULT STDMETHODCALLTYPE CheckCounter( 
		__in  const D3D11_COUNTER_DESC *pDesc,
		__out  D3D11_COUNTER_TYPE *pType,
		__out  UINT *pActiveCounters,
		__out_ecount_opt(*pNameLength)  LPSTR wszName,
		__inout_opt  UINT *pNameLength,
		__out_ecount_opt(*pUnitsLength)  LPSTR wszUnits,
		__inout_opt  UINT *pUnitsLength,
		__out_ecount_opt(*pDescriptionLength)  LPSTR wszDescription,
		__inout_opt  UINT *pDescriptionLength) ;

	virtual UINT STDMETHODCALLTYPE GetCreationFlags();

private:
	ID3D11Device* m_pWrap;
};

#endif
